package com.jxb;

import java.util.Map;

// import org.apache.catalina.Context;
// import org.apache.catalina.Engine;
// import org.apache.catalina.Host;
// import org.apache.catalina.LifecycleException;
// import org.apache.catalina.Server;
// import org.apache.catalina.Service;
// import org.apache.catalina.connector.Connector;
// import org.apache.catalina.core.StandardContext;
// import org.apache.catalina.core.StandardEngine;
// import org.apache.catalina.core.StandardHost;
// import org.apache.catalina.startup.Tomcat;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

/**
 * 类注释
 *
 * @author jiaobo
 * @date Created in 2024/10/3 15:51
 **/
public class BojiaoSpringApplication {

    public static void run(Class clazz){
        AnnotationConfigWebApplicationContext context =
                new AnnotationConfigWebApplicationContext();
        context.register(clazz);
        context.refresh();

        // startTomcat(context);

        WebServer webServer = getWebServer(context);
        webServer.start();
    }

    private static WebServer getWebServer(AnnotationConfigWebApplicationContext context) {
        Map<String, WebServer> beans = context.getBeansOfType(WebServer.class);
        if (beans.isEmpty()) {
            throw new NullPointerException();
        }
        if (beans.size() > 1) {
            throw new IllegalStateException();
        }
        return beans.values().stream().findFirst().get();
    }

    // public static void startTomcat(WebApplicationContext applicationContext){
    //
    //     Tomcat tomcat = new Tomcat();
    //
    //     Server server = tomcat.getServer();
    //     Service service = server.findService("Tomcat");
    //
    //     Connector connector = new Connector();
    //     connector.setPort(8081);
    //
    //     Engine engine = new StandardEngine();
    //     engine.setDefaultHost("localhost");
    //
    //     Host host = new StandardHost();
    //     host.setName("localhost");
    //
    //     String contextPath = "";
    //     Context context = new StandardContext();
    //     context.setPath(contextPath);
    //     context.addLifecycleListener(new Tomcat.FixContextListener());
    //
    //     host.addChild(context);
    //     engine.addChild(host);
    //
    //     service.setContainer(engine);
    //     service.addConnector(connector);
    //
    //     tomcat.addServlet(contextPath, "dispatcher", new DispatcherServlet(applicationContext));
    //     context.addServletMappingDecoded("/*", "dispatcher");
    //
    //     try {
    //         tomcat.start();
    //     } catch (LifecycleException e) {
    //         e.printStackTrace();
    //     }
    //
    // }

}
